package cn.iocoder.yudao.module.iot.service.scene;

import cn.iocoder.yudao.module.iot.controller.app.scene.vo.IotSceneCreateReqVO;
import cn.iocoder.yudao.module.iot.controller.app.scene.vo.IotSceneUpdateReqVO;
import cn.iocoder.yudao.module.iot.controller.app.scene.vo.IotSceneRespVO;
import cn.iocoder.yudao.module.iot.dal.dataobject.scene.IotSceneDO;
import cn.iocoder.yudao.module.iot.dal.dataobject.scene.IotSceneActionDO;

import jakarta.validation.Valid;
import java.util.List;

/**
 * 场景 Service 接口
 *
 * @author 芋道源码
 */
public interface IotSceneService {

    /**
     * 创建场景
     *
     * @param createReqVO 创建信息
     * @param userId 用户ID
     * @return 编号
     */
    Long createScene(@Valid IotSceneCreateReqVO createReqVO, Long userId);

    /**
     * 更新场景
     *
     * @param updateReqVO 更新信息
     * @param userId 用户ID
     */
    void updateScene(@Valid IotSceneUpdateReqVO updateReqVO, Long userId);

    /**
     * 删除场景
     *
     * @param id 编号
     */
    void deleteScene(Long id);

    /**
     * 获得场景
     *
     * @param id 编号
     * @return 场景
     */
    IotSceneDO getScene(Long id);

    /**
     * 获得场景详情
     *
     * @param id 编号
     * @return 场景详情
     */
    IotSceneRespVO getSceneDetail(Long id);

    /**
     * 获得场景列表
     *
     * @param userId 用户ID
     * @return 场景列表
     */
    List<IotSceneRespVO> getSceneList(Long userId);

    /**
     * 执行场景
     *
     * @param id 场景ID
     * @param userId 用户ID
     */
    void executeScene(Long id, Long userId);

    List<cn.iocoder.yudao.module.iot.core.biz.dto.IotSceneRespDTO> getScenesAndActionsByDeviceId(Long deviceId);

    /**
     * 更新场景状态
     *
     * @param id 场景ID
     * @param status 状态 1启用 0禁用
     * @param userId 用户ID
     */
    void updateSceneStatus(Long id, Integer status, Long userId);

    /**
     * 获取指定场景的所有动作
     * @param sceneId 场景ID
     * @return 动作列表
     */
    java.util.List<cn.iocoder.yudao.module.iot.dal.dataobject.scene.IotSceneActionDO> getSceneActions(Long sceneId);

    /**
     * 根据设备ID获取相关的场景列表（包含该设备的动作）
     * @param deviceId 设备ID
     * @return 场景列表
     */
    java.util.List<cn.iocoder.yudao.module.iot.controller.app.scene.vo.IotSceneRespVO> getScenesByDeviceId(Long deviceId);

    /**
     * 获取所有启用的场景
     * @return 启用的场景列表
     */
    java.util.List<cn.iocoder.yudao.module.iot.controller.app.scene.vo.IotSceneRespVO> getEnabledScenes();

}